//package cn.net.sdjx.common;
//
//import java.lang.reflect.Array;
//import java.util.Collections;
//import java.util.List;
//import java.util.Map;
//import java.util.ResourceBundle;
//
//import org.apache.commons.lang3.StringUtils;
//import org.apache.log4j.Logger;
//
//import com.alibaba.fastjson.JSON;
//
//import redis.clients.jedis.Jedis;
//import redis.clients.jedis.JedisPool;
//import redis.clients.jedis.JedisPoolConfig;
//import redis.clients.jedis.Protocol;
//
///**
// * 基于jedis的redis管理类
// * <ul>
// * <li>String==>String
// * <li>T==>String
// * <li>List<T>==>String
// * <li>Map<String,String>==>Map<String,String>
// * <li>Map<String,T>==>serialize
// * <li>Map<String,List<T>>==>serialize
// * <li>+/-
// * </ul>
// * @author	刘晨
// * @Date	2018-01-06
// */
//public class RedisUtil {
//
//	private static Logger logger = Logger.getLogger(RedisUtil.class);
//	private static final String REDIS_RST_ERROR = "ERROR";
//	private static String KEY_INDEX;
//
//
//	/**
//	 * jedis对象池
//	 */
//	public static JedisPool pool;
//	static {
//		ResourceBundle bundle = ResourceBundle.getBundle("redis");
//		JedisPoolConfig config = new JedisPoolConfig();
//		config.setMaxTotal(Integer.parseInt(bundle.getString("redis.pool.maxActive")));
//	    config.setMaxIdle(Integer.parseInt(bundle.getString("redis.pool.maxIdle")));
//	    config.setMaxWaitMillis(Long.parseLong(bundle.getString("redis.pool.maxWait")));
//	    String host = bundle.getString("redis.host");
//	    int port = Integer.parseInt(bundle.getString("redis.port"));
//	    String password = bundle.getString("redis.pass");
//		pool = new JedisPool(config, host, port, Protocol.DEFAULT_TIMEOUT, password);
//		KEY_INDEX = bundle.getString("redis.key.index");
//	}
//
//	/**
//	 * 初始化
//	 */
//	public static Jedis getJedis() {
//		Jedis jedis;
//		try {
//			jedis = pool.getResource();
//			return jedis;
//		} catch (Exception e) {
//			logger.error("RedisUtil-getJedis-获取jedis池出错：", e);
//			throw new RuntimeException("RedisUtil-getJedis-获取jedis池出错", e);
//		}
//	}
//
//	/**
//	 * 缓存字符串值
//	 * <p>
//	 * @param key 键值
//	 * @param value 字符串值
//	 * @return 结果：“OK”成功
//	 */
//	public final static String set(String key, final String value) {
//		if (StringUtils.isBlank(key) || StringUtils.isBlank(value)) {
//			return REDIS_RST_ERROR;
//		}
//		String rst = REDIS_RST_ERROR;
//		Jedis jedis = getJedis();
//		try {
//			rst = jedis.set(KEY_INDEX + key, value);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-set-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 缓存字符串值及过期时间
//	 * <p>
//	 * @param key 键值
//	 * @param seconds 过期时间值(单位秒)
//	 * @param value 字符串值
//	 * @return 结果：“OK”成功
//	 */
//	public final static String setEx(String key, final int seconds, final String value) {
//		if (StringUtils.isBlank(key) || StringUtils.isBlank(value)) {
//			return REDIS_RST_ERROR;
//		}
//		Jedis jedis = getJedis();
//		String rst = REDIS_RST_ERROR;
//		try {
//			rst = jedis.setex(KEY_INDEX + key, seconds, value);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setEx-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 获取字符串值
//	 * <p>
//	 * @param key 键值
//	 * @return 字符串值，未获取到则为null
//	 */
//	public final static String get(String key) {
//		if (StringUtils.isBlank(key)) {
//			return null;
//		}
//		Jedis jedis = getJedis();
//		String rst = null;
//		try {
//			rst = jedis.get(KEY_INDEX + key);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-get-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 缓存对象
//	 * <p>
//	 * 将对象转化为json串存储
//	 * @param key 键值
//	 * @param value 对象
//	 * @return 结果：“OK”成功
//	 */
//	public final static String setObj(String key, final Object object) {
//		String rst = REDIS_RST_ERROR;
//		try {
//			rst = set(key, JSON.toJSONString(object));
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setobj-方法出错：", e);
//		}
//		return rst;
//	}
//
//	/**
//	 * 缓存对象及过期时间
//	 * <p>
//	 * 将对象转化为json串存储
//	 * @param key 键值
//	 * @param seconds 过期时间值（单位秒）
//	 * @param value 对象
//	 * @return 结果：“OK”成功
//	 */
//	public final static String setObjEx(String key, final int seconds, final Object object) {
//		String rst = REDIS_RST_ERROR;
//		try {
//			rst = setEx(key, seconds, JSON.toJSONString(object));
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setobjex-方法出错：", e);
//		}
//		return rst;
//	}
//
//	/**
//	 * 获取对象
//	 * <p>
//	 * @param key 键值
//	 * @param 对象类型
//	 * @return 对象，未获取到则为null
//	 */
//	public final static <T> T getObj(String key, final Class<T> clazz) {
//		if (StringUtils.isBlank(key)) {
//			return null;
//		}
//		Jedis jedis = getJedis();
//		T rst = null;
//		try {
//			rst = JSON.parseObject(jedis.get(KEY_INDEX + key), clazz);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-getobj-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 获取对象list
//	 * <p>
//	 * @param key 键值
//	 * @param 对象类型
//	 * @return List<T>
//	 */
//	public final static <T> List<T> getObjList(String key, final Class<T> clazz) {
//		if (StringUtils.isBlank(key)) {
//			return Collections.emptyList();
//		}
//		Jedis jedis = getJedis();
//		List<T> rst = Collections.emptyList();
//		try {
//			rst = JSON.parseArray(jedis.get(KEY_INDEX + key), clazz);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-getobjlist-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 缓存map
//	 * <p>
//	 * @param key 键值
//	 * @param hash map值
//	 * @return 结果：“OK”成功(相同key多次执行则累加，map中key相同则覆盖)
//	 */
//	public final static String setMap(String key, final Map<String, String> hash) {
//		if (StringUtils.isBlank(key)) {
//			return REDIS_RST_ERROR;
//		}
//		Jedis jedis = getJedis();
//		String rst = REDIS_RST_ERROR;
//		try {
//			rst = jedis.hmset(KEY_INDEX + key, hash);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setMap-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 获取map
//	 * <p>
//	 * @param key 键值
//	 * @return map值
//	 */
//	public final static Map<String, String> getMap(String key) {
//		if (StringUtils.isBlank(key)) {
//			return Collections.emptyMap();
//		}
//		Jedis jedis = getJedis();
//		Map<String,String> rst = Collections.emptyMap();
//		try {
//			rst = jedis.hgetAll(KEY_INDEX + key);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-getMap-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 缓存map<String, T>
//	 * <p>
//	 * @param key 键值
//	 * @param map map值
//	 * @return 结果：“OK”成功
//	 */
//	public final static <T> String setObjMap(String key, Map<String, T> map){
//		if (StringUtils.isBlank(key)) {
//			return REDIS_RST_ERROR;
//		}
//		String rst = REDIS_RST_ERROR;
//		Jedis jedis = getJedis();
//		try {
//			rst = jedis.set(key.getBytes(),SerializeUtil.serialize(map));
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setObjMap-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//    }
//
//	/**
//	 * 获取map<String,T>
//	 * <p>
//	 * @param key 键值
//	 * @return map值
//	 */
//	@SuppressWarnings("unchecked")
//	public final static <T> Map<String,T> getObjMap(String key){
//		if (StringUtils.isBlank(key)) {
//			return Collections.emptyMap();
//		}
//		Jedis jedis = getJedis();
//		Map<String,T> rst = Collections.emptyMap();
//		try {
//			byte[] in = jedis.get(key.getBytes());
//	        rst = (Map<String, T>) SerializeUtil.unserialize(in);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-getObjMap-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//    }
//
//	/**
//	 * 缓存map<String, List<T>>
//	 * <p>
//	 * @param key 键值
//	 * @param map map值
//	 * @return 结果：“OK”成功
//	 */
//	public final static <T> String setObjMapList(String key, Map<String, List<T>> map){
//		if (StringUtils.isBlank(key)) {
//			return REDIS_RST_ERROR;
//		}
//		String rst = REDIS_RST_ERROR;
//		Jedis jedis = getJedis();
//		try {
//			rst = jedis.set(key.getBytes(),SerializeUtil.serialize(map));
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-setObjMapList-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//    }
//
//	/**
//	 * 获取map<String,List<T>>
//	 * <p>
//	 * @param key 键值
//	 * @return map值
//	 */
//	@SuppressWarnings("unchecked")
//	public final static <T> Map<String,List<T>> getObjMapList(String key){
//		if (StringUtils.isBlank(key)) {
//			return Collections.emptyMap();
//		}
//		Jedis jedis = getJedis();
//		Map<String,List<T>> rst = Collections.emptyMap();
//		try {
//			byte[] in = jedis.get(key.getBytes());
//	        rst = (Map<String, List<T>>) SerializeUtil.unserialize(in);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-getObjMapList-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//    }
//
//	/**
//	 * 设置超时时间
//	 * <p>
//	 * @param key 键值
//	 * @param seconds 过期时间值（单位秒）
//	 * @return 结果：1成功，0失败
//	 */
//	public final static long expire(String key, final int seconds) {
//		if (StringUtils.isBlank(key)) {
//			return 0l;
//		}
//		long rst = 0l;
//		Jedis jedis = getJedis();
//		try {
//			rst = jedis.expire(KEY_INDEX + key, seconds);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-expire-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 判断键是否存在
//	 * </p>
//	 * @param key 键值
//	 * @return 结果:true存在，false不存在
//	 */
//	public final static boolean exists(String key) {
//		if (StringUtils.isBlank(key)) {
//			return false;
//		}
//		Jedis jedis = getJedis();
//		boolean rst = false;
//		try {
//			rst = jedis.exists(KEY_INDEX + key);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-exists-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//	/**
//	 * 批量移除
//	 * <p>
//	 * @param keys 键值数组[]
//	 * @return 结果：移除的个数，“-1”失败
//	 */
//	public final static long del(String... keys) {
//		if (Array.getLength(keys) == 0) {
//			return -1l;
//		}
//		long rst = -1l;
//		Jedis jedis = getJedis();
//		try {
//			String[] keysIn = new String[keys.length];
//			for(int i=0;i<keys.length;i++){
//				keysIn[i] = KEY_INDEX + keys[i];
//			}
//			rst = jedis.del(keysIn);
//		} catch (Exception e) {
//			e.printStackTrace();
//			logger.error("RedisUtil-remove-方法出错：", e);
//		} finally {
//			jedis.close();
//		}
//		return rst;
//	}
//
//}
